import diff from "./diff"

// virtualDOM => 新的虚拟 dom
// oldComponent => 旧组件实例对象，可以拿到组件的生命周期和其它属性成员
// oldDOM => 旧的虚拟 dom，和新的 virtualDOM 对象对比
// container => 父容器
// 因为是同一个组件，好像没有更新什么实质的内容，只有props？递归组件的子节点不在这里！
export default function updateComponent(
  virtualDOM,
  oldComponent,
  oldDOM,
  container
) {
  oldComponent.componentWillReceiveProps(virtualDOM.props)
  if (oldComponent.shouldComponentUpdate(virtualDOM.props)) {
    // 未更前前的props
    let prevProps = oldComponent.props
    oldComponent.componentWillUpdate(virtualDOM.props)
    // 组件更新
    oldComponent.updateProps(virtualDOM.props)
    // oldComponent 为组件实例，render() 其实就是新的 virtualDOM
    // 获取组件返回的最新的  
    let nextVirtualDOM = oldComponent.render()
    // 更新 component 组件实例对象
    nextVirtualDOM.component = oldComponent
    // 比对该组件，会从这里深度执行到其子元素
    diff(nextVirtualDOM, container, oldDOM)
    oldComponent.componentDidUpdate(prevProps)
  }
}
